// 设置控制台编码为UTF-8以支持中文显示
const { setupConsoleEncoding } = require('./utils/encoding-utils');
setupConsoleEncoding();

const { app, BrowserWindow, ipcMain } = require('electron')
const path = require('path')
const axios = require('axios')
const fs = require('fs')
const settingsHandlers = require('./handlers/settings-handlers')
const messageHandlers = require('./handlers/message-handlers')

// 读取从 app.js 传递的初始配置
let initialConfig = null;
try {
  if (process.env.INITIAL_CONFIG) {
    initialConfig = JSON.parse(process.env.INITIAL_CONFIG);
    console.log('从 app.js 接收到初始配置:', initialConfig);
  }
} catch (error) {
  console.error('解析初始配置失败:', error);
}

// 回调函数用于同步设置更新
const onSettingsUpdate = (newConfig) => {
  // 这里可以处理设置更新后的逻辑
  console.log('设置已更新:', { config: newConfig });
};

// 初始化消息处理器
messageHandlers.initialize(initialConfig);

// 初始化设置处理器，传递 messageHandlers 的引用和初始配置
settingsHandlers.initialize(onSettingsUpdate, messageHandlers, initialConfig);

const createWindow = () => {
  const win = new BrowserWindow({
    width: 900,
    height: 700,
    autoHideMenuBar: true, // 自动隐藏菜单栏，按Alt键可显示
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js'),
      // 严格的 CSP 策略示例（禁止动态执行代码）
      contentSecurityPolicy: "default-src 'self'; script-src 'self';"
      // 注意：生产环境应避免使用 'unsafe-inline'，可通过 nonce 或 hash 方式替代
    }
  })

  win.loadFile('index.html')  // 打开调试工具
  win.webContents.openDevTools()
}

// 用户ID相关的IPC处理
ipcMain.on('set-user-id', (event, userId) => {
  console.log('收到来自渲染进程的用户ID:', userId);
  
  // 将用户ID设置到messageHandlers
  if (messageHandlers && typeof messageHandlers.setUserId === 'function') {
    messageHandlers.setUserId(userId);
    console.log('用户ID已同步到MessageHandlers');
  }
});

ipcMain.handle('get-user-id', () => {
  if (messageHandlers && typeof messageHandlers.getCurrentUserId === 'function') {
    return messageHandlers.getCurrentUserId();
  }
  return null;
});

app.whenReady().then(() => {
  createWindow()
})

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) createWindow()
})